// #include <stdio.h>
// #include <stdlib.h>
// #include "windows.h"
//
// #define N 10  // 使用大写N符合命名规范
//
// // 辅助数组B改为在MergeSort函数内动态分配
// void Merge(int A[], int low, int mid, int high) {
//     int* B = (int*)malloc((high - low + 1) * sizeof(int));  // 临时数组
//     if (B == NULL) {
//         fprintf(stderr, "内存分配失败\n");
//         exit(EXIT_FAILURE);
//     }
//
//     int i = low, j = mid + 1, k = 0;
//
//     // 归并过程
//     while (i <= mid && j <= high) {
//         if (A[i] <= A[j]) {
//             B[k++] = A[i++];
//         } else {
//             B[k++] = A[j++];
//         }
//     }
//
//     // 处理剩余元素
//     while (i <= mid) B[k++] = A[i++];
//     while (j <= high) B[k++] = A[j++];
//
//     // 将归并结果复制回A
//     for (i = low, k = 0; i <= high; i++, k++) {
//         A[i] = B[k];
//     }
//
//     free(B);  // 释放临时数组
// }
//
// // 递归实现归并排序
// void MergeSort(int A[], int low, int high) {
//     if (low < high) {
//         int mid = low + (high - low) / 2;  // 防止溢出
//         MergeSort(A, low, mid);      // 递归排序左半部分
//         MergeSort(A, mid + 1, high); // 递归排序右半部分
//         Merge(A, low, mid, high);    // 归并
//     }
// }
//
// // 打印数组（需传入长度）
// void PrintArr(int arr[], int length) {
//     for (int i = 0; i < length; i++) {
//         printf("%d ", arr[i]);
//     }
//     printf("\n");
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     int arr[] = {3, 2, 6, 4, 1, 10, 9, 8, 5, 7};
//     int length = sizeof(arr) / sizeof(arr[0]);
//
//     printf("排序前: ");
//     PrintArr(arr, length);
//
//     MergeSort(arr, 0, length - 1);
//
//     printf("排序后: ");
//     PrintArr(arr, length);
//
//     return 0;
// }